home *** CD-ROM | disk | FTP | other *** search
Wrap
; ----------------------------------------------------- ; Peace and Protection (by misspai) ; ----------------------------------------------------- ; CTCP reply-related events ; ----------------------------------------------------- ; Self-pings (background and ; requested) ; ----------------------------------------------------- on me:1:ctcpreply:º*:{ %-my.address = $address .timer905 off | .timer906 off | .timer908 off | .timer910 off set %self.lag $_secs($calc($ticks - $2)) set %-lastselflag $calc(($ticks - $2) / 1000) if (Q !isin $1) { disp Self-ping returned %col.info1 $+ ( $+ %self.lag $+ ) | beep 1 1 } if ((min isin %self.lag) || ($gettok(%self.lag,1,46) > 20)) .timer904 1 %self.ping.time2 _qsp Q else .timer904 1 %self.ping.time1 _qsp Q halt } on me:1:nick:.timer904 1 5 _qsp Q alias _qsp _qcr $me º $+ $1 $ticks | if (%self.lag.warn1 > 0) .timer905 1 %self.lag.warn1 _lagwarn1 | if (%self.lag.warn2 > 0) .timer906 1 %self.lag.warn2 _lagwarn2 | .timer904 off | set %_self.lag.count 0 | .timer908 0 1 _lagup | .timer910 0 $calc(%self.ping.time1 + %self.ping.time2 + 1) _qcr $!me ºQ $!ticks alias _lagwarn1 _alert HIGHSELFLAG Warning- Over $+ %self.lag.warn1 second lag to self! Be prepared for a split or lag burst... alias _lagwarn2 _alert HUGESELFLAG Warning- Over $+ %self.lag.warn2 second lag to self! Split, lag burst, or disconnect imminent! alias _lagup inc %_self.lag.count | set %self.lag %_self.lag.count $+ +sec ; ----------------------------------------------------- ; Color scheme distro ; ----------------------------------------------------- on 1:ctcpreply:P&PCOLORS *:{ _crflood if ($2 != A) dispa Color scheme " $+ %col.info1 $+ $4- $+ " was offered to you by %col.target $+ $nick $+ but it is from an incompatible version of P&P. else { dispa Color scheme " $+ %col.info1 $+ $4- $+ " offered to you by %col.target $+ $nick $+ - Press %col.option $+ CtrlF3 to store in database, and /schemes to view/edit color schemes. set %-cf3 _schget $3- } halt } ; ----------------------------------------------------- ; Ping reply collection ; ----------------------------------------------------- on 1:ctcpreply:PING*:{ _crflood if (%.+disphalt) { unset %.+disphalt | return } if ($1 != PING) _showreply $1- else { set %.pr.ping %-fping. [ $+ [ $nick ] ] if (%.pr.ping != $null) { if ($2 == 42) _showping %.pr.ping Valid else _showping %.pr.ping Timed set %-fping. [ $+ [ $nick ] ] } else { if (($left($2,2) == 00) && ($2 > 0)) _showping $2 Standard else { if ($2 == 42) halt if ($2 == $null) set %.pr.reply (blank reply) else set %.pr.reply " $+ $_noparen($2-) $+ " set %.pr.temp %col.info1 $+ %.pr.reply $+ if (%+ping.sorted) { set %.pct1 $_fixncol(%col.target) $+ $nick $+ _dispping $replace($replace($replace($replace(%ping.format,&ts&,$timestamp),&sec&,%.pr.temp),&nick&,%.pct1),&type&,Invalid) } else { set %.pct1 $_fixncol(%col.target) $+ $nick $+ _dispping $replace($replace($replace($remove(%ping.format,&ts&),&sec&,%.pr.temp),&nick&,%.pct1),&type&,Invalid) } set -u60 %-collect.avg1 %-collect.avg1 set %_last.ping $nick } } } _remcollect $nick halt } raw 401:*:_remcollect $2 on 1:part:#:_remcollect $nick on 1:kick:#:_remcollect $knick on 1:notice:*:?:{ if ((%+nickcolors) && (%nickcol.pingwaitloose)) if ( isin %-nickcol. [ $+ [ $nick ] ] ) _updncol $nick $strip(%-nickcol. [ $+ [ $nick ] ] ) set %.pr.ping %-fping. [ $+ [ $nick ] ] if (%.pr.ping != $null) { _showping %.pr.ping Timed set %-fping. [ $+ [ $nick ] ] } .timer 1 15 _remcollect $nick } on 1:quit:_remcollect $nick alias _showping { set %.sp.ticks $calc($ticks - $1) set %.sp.chs $comchan($nick,0) if ((%+nickcolors) && (%.sp.chs > 0)) { if (%.sp.ticks >= $calc(%nickcol.lagmin * 1000)) _updncol $nick $+ %col.nickg $strip(%-nickcol. [ $+ [ $nick ] ] ) elseif ( isin %-nickcol. [ $+ [ $nick ] ] ) _updncol $nick $strip(%-nickcol. [ $+ [ $nick ] ] ) } inc %-collect.num inc %-collect.total %.sp.ticks set -u60 %-collect.avg1 $_secs($int($calc(%-collect.total / %-collect.num))) set %-collect.avg2 %-collect.avg1 set %_last.ping $nick if ((%+ping.sorted) && (@ isin %ping.route)) { set %.sp.ticks $_secs(%.sp.ticks) if (min !isin %.sp.ticks) { set %.sp.ticks $str($chr(160),2) $+ %.sp.ticks | set %.sp.ticks $right(%.sp.ticks,10) } set %.pct1 $_fixncol(%col.info1) $+ %.sp.ticks $+ set %.pct2 $_fixncol(%col.target) $+ $nick $+ _dispping $replace($replace($replace($replace(%ping.format,&ts&,$timestamp),&sec&,%.pct1),&nick&,%.pct2),&type&,$2-) } else { set %.pct1 $_fixncol(%col.info1) $+ $_secs(%.sp.ticks) $+ set %.pct2 $_fixncol(%col.target) $+ $nick $+ _dispping $replace($replace($replace($remove(%ping.format,&ts&),&sec&,%.pct1),&nick&,%.pct2),&type&,$2-) } } alias _dispping { set %_last.disp $1- if ($_isopen(%ping.route) == $false) open @Ping if (@ isin %ping.route) { if (%+ping.to.front) window -ar @Ping set %.dp.num $_i($line(@Ping,0)) titlebar @Ping Basket - %.dp.num $_plural(ping,%.dp.num) - Average Lag: %-collect.avg1 if (%+ping.sorted) aline -ha %col.base @Ping $1- else { if (%+time.stamp) aline -ha %col.base @Ping $timestamp %@c $1- else aline -ha %col.base @Ping %@c $1- } sline -r %col.base @Ping $sline(@Ping,$sline(@Ping,0)).ln } else { if (%+time.stamp) echo %col.base %ping.route $timestamp %@c $1- else echo %col.base %ping.route %@c $1- } } alias _remcollect { if (%-collect.target != $null) { set %-collect.target $remtok(%-collect.target,$1,32) if (%-collect.target == $null) { if (%+ping.sorted) _dispping 0z Bulk ping of %-collect.bulk complete. Average Lag- %col.info1 $+ %-collect.avg2 $+ else _dispping Bulk ping of %-collect.bulk complete. Average Lag- %col.info1 $+ %-collect.avg2 $+ } } } alias avglag { if (%-collect.target != $null) { unset %-collect.target if (@Ping isin $active) { if (%+ping.sorted) _dispping 0z Bulk ping of %-collect.bulk aborted. Average Lag- %col.info1 $+ %-collect.avg2 $+ else _dispping Bulk ping of %-collect.bulk aborted. Average Lag- %col.info1 $+ %-collect.avg2 $+ } else dispa Bulk ping of %-collect.bulk aborted. Average Lag- %col.info1 $+ %-collect.avg2 $+ } else { if (@Ping isin $active) { if (%+ping.sorted) _dispping 0z Bulk ping average lag- %col.info1 $+ %-collect.avg2 $+ else _dispping Bulk ping average lag- %col.info1 $+ %-collect.avg2 $+ } else dispa Bulk ping average lag- %col.info1 $+ %-collect.avg2 $+ } set %.num $ial(*,0) if (%.num > 0) { :loop set %.nick $ial(*,%.num).nick if ((%+nickcolors) && ( isin %-nickcol. [ $+ [ %.nick ] ] )) _updncol %.nick $strip(%-nickcol. [ $+ [ %.nick ] ] ) if ($_vd(.num) > 0) goto loop } } ; ----------------------------------------------------- ; DCC pings ; ----------------------------------------------------- #dccping on on 1:chat:PING &:{ set -u8 %_dpflood $calc( [ %_dpflood ] + 1) if (%_dpflood > 10) { msg =$nick DCC PING FLOOD DETECTED close -c $nick disps DCC chat with %col.target $+ $nick $+ closed due to detection of a DCC PING FLOOD } msg =$nick PONG $2 } on 1:chat:PONG &:{ if (($left($2,1) != 0) || ($2 !isnum)) return set -u8 %_dpflood $calc( [ %_dpflood ] + 1) if (%_dpflood > 10) { msg =$nick DCC PING FLOOD DETECTED close -c $nick disps DCC chat with %col.target $+ $nick $+ closed due to detection of a DCC PING FLOOD } _showping $2 DCC } #dccping end ; ----------------------------------------------------- ; Version replies/Version pings ; ----------------------------------------------------- on 1:ctcpreply:VERSION*:{ _crflood if (%.+disphalt) { unset %.+disphalt | return } _showreply $1- set %.pr.ping %-fping. [ $+ [ $nick ] ] if (($1 == VERSION) && (%.pr.ping != $null)) { _showping %.pr.ping Version set %-fping. [ $+ [ $nick ] ] } _remcollect $nick halt } ; ----------------------------------------------------- ; Other CTCP replies ; ----------------------------------------------------- on 1:ctcpreply:%-track.code:halt on 1:ctcpreply:*:{ _crflood if (%.+disphalt) { unset %.+disphalt | return } _remcollect $nick if (($1 == ERROR) || ($1 == ERRMSG) || ($1 == UNKNOWN)) if ($_ppcfg(misc,IgnoreERRMSGReplies)) halt _showreply $1- halt } alias _showreply { if (%.+disphalt) { unset %.+disphalt | return } set %.pr.ping %-fping. [ $+ [ $nick ] ] if (%.pr.ping != $null) { _showping %.pr.ping Timed set %-fping. [ $+ [ $nick ] ] } else { if ($2 == $null) dispc CTCP reply of %col.info1 $+ $_ccdef($1) $+ from %col.target $+ $nick $+ $_aopt($address,$nick,$fulladdress,$chan) else dispc CTCP reply of %col.info1 $+ $_ccdef($1) : $_ccdef($2-) $+ from %col.target $+ $nick $+ $_aopt($address,$nick,$fulladdress,$chan) if ((%+nickcolors) && (%nickcol.pingwaitloose)) if ( isin %-nickcol. [ $+ [ $nick ] ] ) _updncol $nick $strip(%-nickcol. [ $+ [ $nick ] ] ) } } alias _crflood { _timersinc 10 -crepfld. $+ $site if (%-crepfld. [ $+ [ $site ] ] > 10) { .ignore -tnu30 $wildsite disps %col.att $+ Ignoring CTCP/replies/notices from %col.target $+ $wildsite $+ for 30 seconds to prevent lockup. (receiving too many CTCP replies.) } } ; ----------------------------------------------------- ; Pinging aliases ; ----------------------------------------------------- alias sp _qsp | disp Self-ping sent alias ps sp alias ping { if ($1 == pong) { _pang | halt } if ($1 == $null) { if ($left($active,1) == =) _error Use /dcp to ping within a DCC chat, assuming the other user has P&P as well. if (($left($active,1) == @) || ($count($active,$chr(32)) > 0)) _error Either use /ping in a channel or query window, or specify a target to ping. set %.pg.win $active } else set %.pg.win $_nickseries(44,$_s2c($1-)) if (%+disp.options) dispr %.pg.win Pinging %col.target $+ %.pg.win $+ %col.option $+ (CtrlF2 to end a bulk ping) else dispr %.pg.win Pinging %col.target $+ %.pg.win _qc %.pg.win PING 00 $+ $ticks _prepcollect %.pg.win } alias fakeping { if ($1 == $null) { if (($left($active,1) == @) || ($count($active,$chr(32)) > 0)) _error Either use /fakeping in a channel or query window, or specify a target to ping. set %.pg.win $active } else set %.pg.win $_nickseries(44,$_s2c($1-)) dispr %.pg.win Fake pinging %col.target $+ %.pg.win $+ (self-timed) _qc %.pg.win PING 42 _pingtimer %.pg.win _prepcollect %.pg.win } alias verping { if ($1 == $null) { if (($left($active,1) == @) || ($count($active,$chr(32)) > 0)) _error Either use /verping in a channel or query window, or specify a target to ping. set %.pg.win $active } else set %.pg.win $_nickseries(44,$_s2c($1-)) dispr %.pg.win Version pinging %col.target $+ %.pg.win $+ (self-timed) _qc %.pg.win VERSION _pingtimer %.pg.win _prepcollect %.pg.win } alias fping fakeping $1- alias vping verping $1- alias dcp { if ($left($active,1) != =) _error DCC ping should only be used in a DCC chat. .enable #dccping say PING 0 $+ $ticks } ; ----------------------------------------------------- ; Other CTCP aliases ; ----------------------------------------------------- alias version { if ($1 == $null) { if (%pp.addon == $null) dispa %[ $+ Peace and Protection %pp.ver by misspai $+ %] Addons: (none) else dispa %[ $+ Peace and Protection %pp.ver by misspai $+ %] Addons: %pp.addon } else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting VERSION info from %col.target $+ %.ctcp.win | _qc %.ctcp.win VERSION } } alias time { if ($1 == $null) dispa It is currently %[ $+ $fulldate $+ %] else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting TIME info from %col.target $+ %.ctcp.win | _qc %.ctcp.win TIME } } alias userinfo if ($1 == $null) _quickhelp /userinfo | else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting USERINFO from %col.target $+ %.ctcp.win | _qc %.ctcp.win USERINFO } alias clientinfo if ($1 == $null) _quickhelp /clientinfo | else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting CLIENTINFO from %col.target $+ %.ctcp.win | _qc %.ctcp.win CLIENTINFO } alias fing if ($1 == $null) _quickhelp /fing | else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting FINGER info from %col.target $+ %.ctcp.win | _qc %.ctcp.win FINGER } alias script if ($1 == $null) _quickhelp /script | else { set %.ctcp.win $_nickseries(44,$_s2c($1-)) | dispr $1 Requesting SCRIPT info from %col.target $+ %.ctcp.win | _qc %.ctcp.win SCRIPT } alias page { if ($1 == $null) _quickhelp /page set %.ctcp.win $_nickseries(44,$1) if ($2 == $null) { dispr $1 Paging %col.target $+ %.ctcp.win $+ (via CTCP) | _qc %.ctcp.win PAGE } else { dispr $1 Paging %col.target $+ %.ctcp.win $+ (via CTCP) with message of %[ $+ $2- $+ %] | _qc %.ctcp.win PAGE %[ $+ $2- $+ %] } } alias ver version $1- alias date time $1- alias uinfo userinfo $1- alias cinfo clientinfo $1- alias ctcp { if ($2 == $null) _quickhelp /ctcp set %.ctcp.win $_nickseries(44,$1) if ($3 == $null) dispr $1 CTCP of %col.info1 $+ $2 $+ sent to %col.target $+ %.ctcp.win else dispr $1 CTCP of %col.info1 $+ $2 : $3- $+ sent to %col.target $+ %.ctcp.win if (($2 == PING) && (($3 == $null) || (($3 isnum) && ($3 != 0)))) _qc %.ctcp.win PING 00 $+ $ticks else _qc %.ctcp.win $2- } alias ctcpreply { if ($2 == $null) _quickhelp /ctcpreply set %.ctcp.win $_nickseries(44,$1) if ($3 == $null) dispr $1 CTCP Reply of %col.info1 $+ $2 $+ sent to %col.target $+ %.ctcp.win else dispr $1 CTCP Reply of %col.info1 $+ $2 : $3- $+ sent to %col.target $+ %.ctcp.win _qcr %.ctcp.win $2- } ; ----------------------------------------------------- ; Miscellaneous aliases and ; identifiers ; ----------------------------------------------------- alias _secs if ($1 > 59999) return $int($calc($1 / 60000)) $+ min $calc($1 % 60000 / 1000) $+ sec | return $calc($1 / 1000) $+ sec alias _avglag if (%-collect.avg1 == $null) return | if (%-collect.target == $null) return á--á AvgLag: %-collect.avg1 | if ($_numtok(32,%-collect.target) < 4) return á--á AverageLag: %-collect.avg1 $+ , need pings from %-collect.target | return á--á AverageLag: %-collect.avg1 $+ , waiting on $_numtok(32,%-collect.target) pings alias _pingtimer { set %.pt.start $ticks set %.pt.num $_numtok(44,$1) :loop set %.pt.targ $gettok($1,%.pt.num,44) if ($chan(%.pt.targ) == %.pt.targ) { set %.pt.chan $nick(%.pt.targ,0) :loop2 | set %.pt.nick $nick(%.pt.targ,%.pt.chan) | if ((%.pt.nick != X) && (%.pt.nick != W)) set %-fping. [ $+ [ %.pt.nick ] ] %.pt.start | if ($_vd(.pt.chan) > 0) goto loop2 } else set %-fping. [ $+ [ %.pt.targ ] ] %.pt.start if ($_vd(.pt.num) > 0) goto loop } alias _prepcollect { unset %-collect.* unset %.pt.hit set %.pt.num $_numtok(44,$1) :loop set %.pt.targ $gettok($1,%.pt.num,44) if ($chan(%.pt.targ) == %.pt.targ) { set %.pt.chan $nick(%.pt.targ,0) :loop2 set %.pt.nick $nick(%.pt.targ,%.pt.chan) if ((%.pt.nick != $me) && (%.pt.nick != X) && (%.pt.nick != W)) { set %-collect.target %-collect.target %.pt.nick if (%+nickcolors) _updncol %.pt.nick $+ %col.nickw $strip(%-nickcol. [ $+ [ %.pt.nick ] ] ) inc %.pt.hit } if ($_vd(.pt.chan) > 0) goto loop2 } else { set %-collect.target %-collect.target %.pt.targ if (%+nickcolors) _updncol %.pt.targ $+ %col.nickw $strip(%-nickcol. [ $+ [ %.pt.targ ] ] ) inc %.pt.hit } if ($_vd(.pt.num) > 0) goto loop if ($_numtok(32,%-collect.target) == 1) unset %-collect.target else { if ($_numtok(44,$1) == 1) set %-collect.bulk %col.target $+ $gettok($1,1,44) $+ else set %-collect.bulk %col.target $+ %.pt.hit $+ targets } } on 1:close:@Ping:unset %-collect.avg1 on 1:close:@Banlist:{ if ((%_bantoadd != $null) || (%_bantorem != $null)) { if ($me !isop %_banchan) { unset %_ban* | .timer911 off | _error You are not an op on %_banchan $+ , banlist modifications canceled. } if (%_bantorem != $null) _massmode %_banchan -b %_bantorem if (%_bantoadd != $null) _massmode %_banchan +b %_bantoadd } unset %_ban* }